<?php

// Pour les catégories
require_once("champLienTables.php") ;

//function printVideoForm($id, $titre, $date, $description, $lien, $duree, $tag, $acteurs, $realisateur, $categories=NULL, $evenements=NULL) {
function printVideoForm($default)//id, $titre, $date, $description, $lien, $duree, $tag, $acteurs, $realisateur, $categories=NULL, $evenements=NULL)
{
    // Gestion du titre
    if (isset($default['id'])) $titre = "Modification de la vidéo \"{$default['titre']}\"" ;
    else $titre = "Ajout d'une vidéo" ;
?>
<div class="formulaireVideo">
    <form action="<?= $_SERVER['REQUEST_URI'] ?>" method="post">
        <input type="hidden" name="id" id="id" value="<?= $default['id'] ?>"/>
<table class="form">
    <tr>
        <th colspan="2">
            <?= $titre ?>
        </th>
    </tr>
    <tr>
        <td class="label">
            <label for="titre">Titre</label>
        </td>
        <td class="champ">
            <input type="text" name="titre" id="titre" value="<?= $default['titre'] ?>"/>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="date">Date (JJ/MM/AAAA)</label>
        </td>
        <td class="champ">
            <input type="text" name="date" id="date" size="10" value="<?= $default['date'] ?>"/>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="description">Description</label>
        </td>
        <td class="champ">
            <textarea name="description" id="description" rows="10" cols="50"><?= $default['description'] ?></textarea>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="lien">Adresse du fichier vidéo</label>
        </td>
        <td class="champ">
            <input type="hidden" name="ancien_lien" value="<?= $default['lien'] ?>"/>
            <input type="text" name="lien" id="lien" value="<?= $default['lien'] ?>"/>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="duree">Durée</label>
        </td>
        <td class="champ">
            <input type="text" name="duree" id="duree" value="<?= $default['duree'] ?>"/>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="tag">Mots-clés</label>
        </td>
        <td class="champ">
            <textarea name="tag" id="tag" rows="3" cols="50"><?= $default['tag'] ?></textarea>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="acteurs">Acteurs</label>
        </td>
        <td class="champ">
            <textarea name="acteurs" id="acteurs" rows="10" cols="25"><?= $default['acteurs'] ?></textarea>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for="realisateur">Realisateur</label>
        </td>
        <td class="champ">
            <input type="text" name="realisateur" id="realisateur" value="<?= $default['realisateur'] ?>"/>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for=\"categories\">Catégories</label>
        </td>
        <td class="champ">
            <?php champLienTables("categories", "Categorie", "nom", $default['categories'], true, true) ; ?>
        </td>
    </tr>
    <tr>
        <td class="label">
            <label for=\"evenements\">&Eacute;vénements associés</label>
        </td>
        <td class="champ">
            <?php champLienTables("evenements", "Evenement", "titre", $default['evenements'], true, true, true) ; ?>
        </td>
    </tr>
    <tr>
        <td class="valid" colspan="2">
            <input type="submit" value="Valider" />
            <input type="reset" value="Réinitialiser" />
        </td>
    </tr>
</table>
    </form>
</div>
<?php
}

//function ajouterVideo ($titre, $date, $description, $lien, $duree, $tag, $acteurs, $realisateur, $id=0, $idCategories=array(), $idEvenements=array()) {
function ajouterVideo ($params, &$id)//titre, $date, $description, $lien, $duree, $tag, $acteurs, $realisateur, $id=0, $idCategories=array(), $idEvenements=array())
{

    // Ajout de la vidéo
    connect() ;
    $requete = "INSERT INTO `Video` (`titre`, `date`, `description`, `lien`, `duree`, `acteurs`, `realisateur`) " ;
    $requete .= "VALUES (\"{$params['titre']}\", \"{$params['date']}\", \"{$params['description']}\", \"{$params['lien']}\", \"{$params['duree']}\", \"{$params['acteurs']}\", \"{$params['realisateur']}\"); ";
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    $id = mysql_insert_id() ;
    //echo "<h1>$id</h1>" ;

    // Ajout des mots clés
    updateTags (explode(" ", $params['tag']." ".$params['titre']), $is) ;

    // Analyse du fichier video
    if (strlen($params['lien']) > 0)
        if(!analyserFichierVideo($params['lien'], $id))
        {
            alert ("Erreur dans l'analyse du fichier vidéo.") ;
        }

    // Ajout des nouvelles catégories
    // Leurs ids sont concaténées à $idCategories
    // Ajout des liens aux catégories
    connect() ;
    foreach($params['categories'] as $idCat)
    {
        $requete = "INSERT INTO `LienVideoCategorie` (`video`, `categorie`) " ;
        $requete .= "VALUES (\"{$id}\", \"{$idCat}\");" ;
        $result = $result && executerRequete($requete, $GLOBALS['debug']) ;
    }
    mysql_close() ;

    // Ajout des liens aux évènements
    // Mise à jour des liens aux évènements
    connect() ;
    foreach ($params['evenements'] as $idE)
    {
        $requete = "INSERT INTO LienVideoEvenement (video, evenement) VALUES (\"{$id}\", \"{$idE}\");" ;
        $result = $result && executerRequete ($requete, $GLOBALS['debug']) ;
    }
    mysql_close() ;


    // Script
    ajouterScript("executerTache(\"Video\", \"ajout\", \"{$id}\");") ;

    return $result ;
}

//function updateVideo ($id, $titre, $date, $description, $lien, $duree, $tag, $acteurs, $realisateur, $idCategories=array(), $idEvenements=array()) {
function updateVideo ($params)
{
    connect() ;
    // On vérifie s'il y a eu un éventuel changement du lien
    //$result = executerRequete("SELECT id FROM Video WHERE id='{$id}' AND lien='{$lien}';", $GLOBALS["debug"]) ;
    //$changementLien = (strlen($lien) > 0 && mysql_num_rows($result) > 0 ) ;

    // Mise à jour
    $requete = "UPDATE Video SET " ;
    $requete .= "`titre` = \"{$params['titre']}\", " ;
    $requete .= "`date` = \"{$params['date']}\", " ;
    $requete .= "`description` = \"{$params['description']}\", " ;
    $requete .= "`lien` = \"{$params['lien']}\", " ;
    $requete .= "`duree` = \"{$params['duree']}\", " ;
    $requete .= "`acteurs` = \"{$params['acteurs']}\", " ;
    $requete .= "`realisateur` = \"{$params['realisateur']}\" " ;
    $requete .= "WHERE `id` = \"{$params['id']}\";" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    mysql_close() ;

    // Analyse du fichier vidéo
    if (strlen($params['lien']) > 0 && $params['lien'] != $params['ancien_lien'])
    {
        if(!analyserFichierVideo($params['lien'], $params['id']))
        {
            alert ("Erreur dans l'analyse du fichier vidéo.") ;
        }
    }

    // Ajout des nouvelles catégories
    // Leurs ids sont concaténées à $idCategories
    //ajouterCategories($nomNouvellesCategories, $descriptionNouvellesCategories, &$idCategories) ;

    // Mise à jout des tags
    updateTags(explode(" ", $params['tag']." ".$params['titre']), $params['id']) ;

    
    // Mise à jour des liens aux catégories
    connect() ;
    $result = $result && executerRequete ("DELETE FROM `LienVideoCategorie` WHERE `video`=\"{$params['id']}\";", $GLOBALS["debug"]) ;
    foreach($params['categories'] as $idCat)
    {
        $requete = "INSERT INTO `LienVideoCategorie` (`video`, `categorie`) " ;
        $requete .= "VALUES ('{$params['id']}', '{$idCat}');" ;
        $result = $result && executerRequete($requete, $GLOBALS['debug']) ;
    }
    mysql_close() ;

    // Mise à jour des liens aux évènements
    connect() ;
    $result = $result && executerRequete ("DELETE FROM LienVideoEvenement WHERE video = \"{$params['id']}\";", $GLOBALS['debug']) ;
    foreach ($params['evenements'] as $idE)
    {
        $requete = "INSERT INTO LienVideoEvenement (video, evenement) VALUES (\"{$params['id']}\", \"{$idE}\");" ;
        $result = $result && executerRequete ($requete, $GLOBALS['debug']) ;
    }
    mysql_close() ;

    // Script
    ajouterScript("executerTache(\"Video\", \"update\", \"{$params['id']}\");") ;

    return $result ;
}

// Fonction remplissant automatiquement les champs d'une video à l'aide d'un fichier video
function analyserFichierVideo ($lien, $idVideo)
{
    // Existence et accessibilité du fichier
    if (!file_exists($lien))
    {
        echo "merde" ;
        return false ;
    }

    // Duree
    exec("./bin/duree.sh {$lien}", $output) ;
    $time = intval($output[0]) ;

    // Formattage du temps pour l'aperçu
    $heures = floor($time / 3600) ;
    $minutes = floor( ($time % 3600) / 60) ;
    $secondes = floor( ($time % 60) / 60 ) ;

    // Apercus videos
    exec("apercu.sh {$lien} /Applications/MAMP/htdocs/JTX/apercus/apercu{$idVideo}.jpg $heures:$minutes:$secondes") ;
    $image = "/Applications/MAMP/htdocs/JTX/apercus/apercu{$idVideo}.jpg" ;

    
    // Mise à jour dans la base de données
    connect() ;
    $requete = "UPDATE Video SET lien=\"{$lien}\", duree=\"{$time}\" WHERE id=\"{$idVideo}\";" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    mysql_close() ;
    return $result ;
}


// Fonction de mise à jour des tags
function updateTags ($listTags, $video)
{
    // Suppression des anciens tags
    connect() ;
    $requete = "DELETE FROM `LienTagVideo` WHERE `id_video`=\"{$video}\";" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    
    // Insertion des nouveaux tags
    $listTagsAjoutes = array() ;
    foreach ($listTags as $tag)
    {
        // Mise en minuscules
        $tag = strtolower($tag) ;
        //echo $tag ;

        // On regarde si le tag n'est pas vide
        if ($tag == "") continue ;

        // On regarde si le tag n'est pas en doublon
        if (in_array($tag, $listTagsAjoutes)) continue ;
        $listTagsAjoutes[] = $tag ;

        // On regarde si le tag existe
        $requete = "SELECT `id` FROM `Tag` WHERE `tag`=\"{$tag}\";" ;
        $result = executerRequete($requete, $GLOBALS["debug"]) ;
        if (mysql_num_rows($result)>0)
        {
            $row = mysql_fetch_assoc($result) ;
            $id = $row["id"] ;
        }
        else // On effectue une insertion du nouveau tag
        {
            $requete = "INSERT INTO `Tag` (`tag`) VALUES (\"{$tag}\") ;" ;
            $result = executerRequete($requete, $GLOBALS["debug"]) ;
            if (!$result) {
                alert ("Erreur dans l'ajout du tag \"$tag\".") ;
                continue ;
            }
            $id = mysql_insert_id() ;
        }

        // On insere le nouveau lien
        $requete = "INSERT INTO `LienTagVideo` (`id_video`, `id_tag`) VALUES (\"{$video}\", \"{$id}\") ;" ;
        $result = executerRequete($requete, $GLOBALS["debug"]) ;
        if (!$result) alert ("Erreur dans l'ajout du lien vers le tag \"$tag\".") ;
    }
    mysql_close() ;

    // Nettoyage de la liste des tags (toutes les 10 exécutions
    if (rand() % 10 == 0) nettoyerTags() ;
}

// Nettoyage des tags
function nettoyerTags()
{
    connect() ;

    // Suppression des liens vers des videos qui n'existent plus
    $requete = "SELECT LienTagVideo.id AS id, COUNT(Video.id) AS nVideos FROM LienTagVideo LEFT JOIN Video ON Video.id=LienTagVideo.id_video GROUP BY LienTagVideo.id ;" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    $liensOrphelins = array() ;
    while ($row = mysql_fetch_assoc($result))
    {
        if ($row["nVideos"] == "0") $liensOrphelins[] = $row["id"] ;
    }

    // Idem pour les liens vers des tags qui n'existent plus
    $requete = "SELECT LienTagVideo.id AS id, COUNT(Tag.id) AS nVideos FROM LienTagVideo LEFT JOIN Tag ON Tag.id=LienTagVideo.id_tag GROUP BY LienTagVideo.id ;" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    while ($row = mysql_fetch_assoc($result))
    {
        if ($row["nVideos"] == "0") $liensOrphelins[] = $row["id"] ;
    }

    // Suppression de ces liens orphelins
    $listLiens = implode("\", \"", $liensOrphelins) ;
    $requete = "DELETE FROM LienTagVideo WHERE id IN (\"{$listLiens}\") ;" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    //echo "Nombre de liens supprimes : " . mysql_affected_rows() . "<br/>" ;

    // Recherche des tags sans liens
    $requete = "SELECT Tag.id AS id, COUNT(LienTagVideo.id_tag) AS nLiens FROM Tag LEFT JOIN LienTagVideo ON LienTagVideo.id_tag = Tag.id GROUP BY Tag.id;" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    $tagsOrphelins = array() ;
    while ($row = mysql_fetch_assoc($result))
    {
        if ($row["nLiens"] == "0") $tagsOrphelins[] = $row["id"] ;
    }

    // Suppression de ces tags orphelins
    $listTags = implode("\", \"", $tagsOrphelins) ;
    //echo $listTags ;
    $requete = "DELETE FROM Tag WHERE Tag.id IN (\"{$listTags}\");" ;
    $result = executerRequete($requete, $GLOBALS["debug"]) ;
    //echo "Nombre de tags supprimes : " . mysql_affected_rows() . "<br/>" ;

    mysql_close() ;

}

// Suppression d'une vidéo
function deleteVideo ($id, &$supprime)
{
    $requete = "DELETE FROM Video WHERE id= \"$id\"; ";
    connect() ;
    $result = executerRequete($requete, $GLOBALS['debug']) ;
    $supprime = mysql_affected_rows() ;
    mysql_close() ;
    ajouterScript("executerTache(\"Video\", \"delete\", \"{$id}\");") ;
    return $result ;
}


?>